package com.foreknow.controller;

/**
 * @author shkstart
 * @create 2021-08-19 9:35
 */


import com.foreknow.model.Admin;
import com.foreknow.model.Guestbook;
import com.foreknow.service.AdminService;
import com.foreknow.service.BusinessService;
import com.foreknow.service.impl.AdminServiceImpl;
import com.foreknow.service.impl.BusinessServiceImpl;
import com.foreknow.view.MainWindow;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;

/**
 * Servlet：服务器端的应用程序(使用java来编写)
 * 作用：处理客户端请求(例如:用户所填写的数据)
 * 所有的类都要继承HttpServlet
 *
 * 1.要想创建Servlet一定要继承HttpServlet
 * 2.需要重写doGet/doPost方法
 *   什么时候调用这两方法:当客户端向服务器端发送的请求get，就会调用doGet方法
 *                    当客户端向服务器端发送的请求post，就会调用doPost方法
 * 3.方法的参数
 *      3.1HttpServletRequest接口：这个接口无需我们初始化，服务器会自动初始化。接口中会提供一些常用的方法来处理一些请求的参数
 *      3.2HttpServletResponse接口: 这个接口无需我们初始化，服务器会自动初始化。接口中会提供一些常用的方法来处理一些的响应的结果
 *
 *
 * "获取application context的路径"+req.getContextPath()
 * "获取到请求参数"+req.getParameter
 *"获取到请求的uri地址"+req.getRequestURI()
 *
 *
 *
 * 关于Servlet中的资源跳转
 * 1.请求转发 ： req.getRequestDispatcher("/show").forward(req,resp);相当于客户端向服务器端发送一次请求  要加上  /
 *      url地址是第一次发送请求的地址  http://localhost:8080/ManagerSystem/add  不是转发的目标资源地址  意味着每刷新一次就会执行一次第一次地址对应的Servlet
 *      请求抓发只能诸法站内的资源，不能转发站外的资源
 * 2.重定向：相当于客户端向服务器端发送了两次请求  A向B借钱 B没有  A又向C去借
 *           resp.sendRedirect(req.getContextPath()+"/show");    //站内资源
 *                 resp.sendRedirect("http://www.baidu.com");    //站外资源
 *           url地址最终目标资源  http://localhost:8080/ManagerSystem/show
 *           重定向可以定义到任意资源(站内/站外)
 */

//
//@WebServlet(urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        //服务器端向客户端相应的内容的类型(MIME) https://www.w3school.com.cn/media/media_mimeref.asp
//        resp.setContentType("text/html;charset=utf-8");

        PrintWriter out=resp.getWriter();
        //获取请求参数
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        out.println(username+"----"+password);

//        out.println("<html>");
//        out.println("<head>");
//        out.println("<title>Login Servlet </title>");
//        out.println("</head>");
//        out.println("<body>");
//        out.println(req.getMethod());
//
//        out.println("</br>");
//        out.println("获取application context的路径"+req.getContextPath());
//        out.println("</br>");
//
//        out.println(new Date());
//        out.println("</br>");
//        out.println("获取到请求的uri地址"+req.getRequestURI()+"<br>");
//        out.println("获取到请求参数"+req.getParameter("username")+"<br>");
//        out.println("</body>");
//        out.println("</html>");

//        boolean isSuccess=islogin(req,resp);
//        if(isSuccess){
//            req.getRequestDispatcher("/user/manager?q=list").forward(req,resp);
//        }
    }

    @Override
    public void init(ServletConfig config) throws ServletException {
        //获取初始化参数(局部)
//        String pageSize=config.getInitParameter("pageSize");
        //获取全局的初始化参数
        String pageSize=config.getServletContext().getInitParameter("pageSize");
        System.out.println(pageSize);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        //服务器向客户端响应的内容大类型为(MIME)  https://www3w3school.com.cn/media
//        resp.setContentType("text/html;charset=utf-8");
//        //设置客户端向服务器端发送请求的字符编码集
//        req.setCharacterEncoding("utf-8");
        PrintWriter out=resp.getWriter();
        //如何获取到Session ,之后就可以将数据保存到session中用于数据的共享


       // boolean isLogin=false;

        HttpSession httpSession=req.getSession();
//        boolean isSuccess=islogin(req,resp,httpSession);
//
//if(isSuccess){
//
//    req.getRequestDispatcher("/user/manager?q=list").forward(req,resp);
//}
//else {
     httpSession=req.getSession();
    //获取请求参数
    String username = req.getParameter("username");
    String password = req.getParameter("password");
    AdminService adminService = new AdminServiceImpl();
    Admin admin = adminService.login(username, password);
    if(admin!=null){
        out.println("登录成功");

        //将用于名保存到session中
        httpSession.setAttribute("username",admin.getAdminName());

        Cookie cookie=new Cookie(username,password);
        cookie.setMaxAge(1*60*60*24*30);
        resp.addCookie(cookie);




//            req.getRequestDispatcher("/show").forward(req,resp);
//            resp.sendRedirect(req.getContextPath()+"/show");
        req.getRequestDispatcher("/user/manager?q=list").forward(req,resp);


    }else {
        out.println("登录失败");
    }
}






//    }


    protected boolean islogin(HttpServletRequest req, HttpServletResponse resp ,HttpSession httpSession) throws ServletException, IOException {
         httpSession=req.getSession();
        Cookie[] cookies = req.getCookies();
        AdminService service=new AdminServiceImpl();
        List<Object> list = null;
        try {
            list = service.showAll();
            for (int i = 0; i < cookies.length; i++) {
                for (int j = 0; j < list.size(); j++) {
                    Admin ad= (Admin) list.get(j);
                    if(cookies[i].getName().equals(ad.getAdminName())&&cookies[i].getValue().equals(ad.getPassword())){
                        httpSession.setAttribute("username",ad.getAdminName());
                        return true;
                    }
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }


        return false;
    }

}
